
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
//定义结点结构体
typedef struct student{
    int num;		//号
    struct student *next;
}STU;
 
void link_creat_head(STU **p_head,STU *p_new)
{
    STU *p_mov = *p_head;
    if(*p_head == NULL)	//当第一次加入链表为空时，head执行p_new
    {
        *p_head = p_new;
        p_new->next=NULL;
    }
    else //第二次及以后加入链表
    {
        while(p_mov->next!=NULL)
        {
            p_mov=p_mov->next;	//找到原有链表的最后一个节点
        }
 
        p_mov->next = p_new;	//将新申请的节点加入链表
        p_new->next = NULL;
    }
}

void link_print(STU *head)
{
    STU *p_mov;
    //定义新的指针保存链表的首地址，防止使用head改变原本链表
    p_mov = head;
    //当指针保存最后一个结点的指针域为NULL时，循环结束
    while(p_mov!=NULL)
    {
        //先打印当前指针保存结点的指针域
        printf("%d\t",p_mov->num);
 
        //指针后移，保存下一个结点的地址
        p_mov = p_mov->next;
    }
}
int main()
{
    STU *head = NULL,*p_new = NULL;
    int i;
    while (1)
    {   cin>>i;
        if (i<0)break;
        p_new = (STU*)malloc(sizeof(STU));//申请一个新节点
        p_new->num=i;
        link_creat_head(&head,p_new);	//将新节点加入链表
    }
    link_print(head);
    return 0;
}
